function getType(obj) {
  return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}

export function isObject(obj) {
  return typeof obj === "object" && obj !== null;
}

export function isArray(arr) {
  return Array.isArray ? Array.isArray(arr) : getType(arr) === "array";
}

/**
 * 是否相等 对象遍历比较
 * @param {any} value1
 * @param {any} value2
 * @returns
 */
export function isEqual(value1, value2) {
  if (Object.is(value1, value2)) {
    return true;
  }
  if (isObject(value1) && isObject(value2)) {
    const keys1 = Object.keys(value1);
    const keys2 = Object.keys(value2);
    if (keys1.length !== keys2.length) {
      return false;
    }
    for (const key of keys1) {
      if (!keys2.includes(key) || !isEqual(value1[key], value2[key])) {
        return false;
      }
    }
    return true;
  }
  return false;
}

/**
 * 是否为二维数组
 * @param {any} arr
 * @returns
 */
export function is2DArray(arr) {
  if (!isArray(arr)) return false;
  return arr.every((item) => isArray(item));
}
